#include <iostream>
#include <string>
#include <vector>
using namespace std;

#include <unistd.h>
#include <signal.h>

void myhandler(int signo)
{
    cout << "set a signo:" << signo << endl;
    int cnt = 20;
    while (cnt--)
    {
        // cout << "正在处理信号:" << cnt << endl;
        printf("正在处理信号:%2d\r", cnt);
        fflush(stdout);
        sleep(1);
    }
}

int main()
{
    struct sigaction act, oldact; // 定义两个结构体
    act.sa_handler = myhandler;   // 设置自定义方法
    act.sa_flags = 0;             // 将flag设置为0
    sigemptyset(&act.sa_mask);    // 将mask表置零,内核捕捉信号的时候会将该信号的mask置零
    sigaddset(&act.sa_mask, SIGINT);

    //如果在处理信号期间，除了该信号还需要屏蔽其他信号可以在sa_mask中设置
    sigaddset(&act.sa_mask, 3);
    
    sigaction(SIGINT, &act, &oldact); // 捕捉信号

    int count = 0;
    while (1)
    {
        cout << "我正在运行, 我的pid为:" << getpid() << "次数" << count++ << endl;
        sleep(1);
    }
    return 0;
}
